<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>Funktionen &mdash; PowerShell fuer Systemintegratoren</title>
    
    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../',
        VERSION:     '1.0',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="../_static/jquery.js"></script>
    <script type="text/javascript" src="../_static/underscore.js"></script>
    <script type="text/javascript" src="../_static/doctools.js"></script>
    <script type="text/javascript" src="../_static/translations.js"></script>
    <link rel="top" title="PowerShell fuer Systemintegratoren" href="../index.html" /> 
  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="Allgemeiner Index"
             accesskey="I">Index</a></li>
        <li><a href="../index.html">PS4SYS</a> &raquo;</li> 
      </ul>
    </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <p class="logo"><a href="../index.html">
              <img class="logo" src="../_static/PowerShell_icon_small.png" alt="Logo"/>
            </a></p>
  <h3>Diese Seite</h3>
  <ul class="this-page-menu">
    <li><a href="../_sources/aufgabe_rst/Aufgaben_PowerShell_Funktionen.txt"
           rel="nofollow">Quelltext anzeigen</a></li>
  </ul>
<div id="searchbox" style="display: none">
  <h3>Schnellsuche</h3>
    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Los" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Geben Sie Suchbegriffe oder einen Modul-, Klassen- oder Funktionsnamen ein.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="funktionen">
<h1>Funktionen<a class="headerlink" href="#funktionen" title="Permalink zu dieser Überschrift">¶</a></h1>
<p>Lösungen sind hier: <a class="reference internal" href="../Loesungen.html#loesung-powershell-funktionen"><em>Funktionen</em></a>:</p>
<ul>
<li><p class="first">Schreiben Sie eine Funktion, die als Parameter einen Pfad erwartet und anschließend den Inhalt des Pfades ausgibt. Lösung ist hier <em class="xref std std-ref">loesung_dir</em>.</p>
</li>
<li><p class="first">Erweitern Sie die obige Funktion um eine rekursive Variante. Sollte der Pfad Unterordner besitzen, sollen auch diese ausgegeben werden. <em class="xref std std-ref">loesung_dir_rekursiv</em></p>
</li>
<li><p class="first">Erweitern Sie die obige Funktion: Es soll jetzt möglich sein, nach bestimmten Dateikennungen die Ausgabe zu gestalten. <em class="xref std std-ref">loesung_dir_rekursiv_extension</em></p>
</li>
<li><p class="first">Wie überprüfen Sie, ob ein Array einen bestimmten Wert enthält</p>
</li>
<li><dl class="first docutils">
<dt>Wie überprüfen Sie, ob zwei Arrays gleich sind</dt>
<dd><p class="first">Folgende Funktion überprüft zwei Arrays auf Gleichheit</p>
<div class="last highlight-sh"><div class="highlight"><pre><span class="k">function </span>AreArraysEqual<span class="o">(</span><span class="nv">$a1</span>, <span class="nv">$a2</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">if</span> <span class="o">(</span><span class="nv">$a1</span> -isnot <span class="o">[</span>array<span class="o">]</span> -or <span class="nv">$a2</span> -isnot <span class="o">[</span>array<span class="o">])</span> <span class="o">{</span>
          throw <span class="s2">&quot;Both inputs must be an array&quot;</span>
        <span class="o">}</span>
        <span class="k">if</span> <span class="o">(</span><span class="nv">$a1</span>.Rank -ne <span class="nv">$a2</span>.Rank<span class="o">)</span> <span class="o">{</span>
          <span class="k">return</span> <span class="nv">$false</span>
        <span class="o">}</span>
        <span class="k">if</span> <span class="o">([</span>System.Object<span class="o">]</span>::ReferenceEquals<span class="o">(</span><span class="nv">$a1</span>, <span class="nv">$a2</span><span class="o">))</span> <span class="o">{</span>
          <span class="k">return</span> <span class="nv">$true</span>
        <span class="o">}</span>
        <span class="k">for</span> <span class="o">(</span><span class="nv">$r</span> <span class="o">=</span> 0; <span class="nv">$r</span> -lt <span class="nv">$a1</span>.Rank; <span class="nv">$r</span>++<span class="o">)</span> <span class="o">{</span>
          <span class="k">if</span> <span class="o">(</span><span class="nv">$a1</span>.GetLength<span class="o">(</span><span class="nv">$r</span><span class="o">)</span> -ne <span class="nv">$a2</span>.GetLength<span class="o">(</span><span class="nv">$r</span><span class="o">))</span> <span class="o">{</span>
                        <span class="k">return</span> <span class="nv">$false</span>
          <span class="o">}</span>
        <span class="o">}</span>

        <span class="nv">$enum1</span> <span class="o">=</span> <span class="nv">$a1</span>.GetEnumerator<span class="o">()</span>
        <span class="nv">$enum2</span> <span class="o">=</span> <span class="nv">$a2</span>.GetEnumerator<span class="o">()</span>

        <span class="k">while</span> <span class="o">(</span><span class="nv">$enum1</span>.MoveNext<span class="o">()</span> -and <span class="nv">$enum2</span>.MoveNext<span class="o">())</span> <span class="o">{</span>
          <span class="k">if</span> <span class="o">(</span><span class="nv">$enum1</span>.Current -ne <span class="nv">$enum2</span>.Current<span class="o">)</span> <span class="o">{</span>
                        <span class="k">return</span> <span class="nv">$false</span>
          <span class="o">}</span>
        <span class="o">}</span>
        <span class="k">return</span> <span class="nv">$true</span>
<span class="o">}</span>
</pre></div>
</div>
</dd>
</dl>
</li>
<li><p class="first">Folgendes Powershell-Skript berechnet den Wochentag mit Hilfe eines eigenen Algorithmus. Verbessern Sie die Lesbarkeit des Skriptes, indem Sie die verschiedenen Teile des Quellcode mit Hilfe von Funktionen kapseln.</p>
<blockquote>
<div><div class="highlight-sh"><div class="highlight"><pre><span class="c">#Berechnung des Wochentags</span>

<span class="o">[</span>int<span class="o">]</span><span class="nv">$t</span> <span class="o">=</span> Read-Host -prompt <span class="s2">&quot;Geben Sie einen Tag ein&quot;</span>
<span class="o">[</span>int<span class="o">]</span><span class="nv">$m</span> <span class="o">=</span> Read-Host -prompt <span class="s2">&quot;Geben Sie einen Monat ein&quot;</span>

<span class="nv">$MerkeMonat</span> <span class="o">=</span> <span class="nv">$m</span>;

<span class="o">[</span>int<span class="o">]</span><span class="nv">$j</span> <span class="o">=</span> Read-Host -prompt <span class="s2">&quot;Geben Sie das Jahr ein&quot;</span>

<span class="k">if</span><span class="o">(</span><span class="nv">$m</span> -le 2<span class="o">)</span>
<span class="o">{</span>
        <span class="nv">$m</span> +<span class="o">=</span> 10;
        <span class="nv">$j</span> -<span class="o">=</span> 1;
<span class="o">}</span>
<span class="k">else</span>
<span class="o">{</span>
        <span class="nv">$m</span> -<span class="o">=</span> 2;
<span class="o">}</span>

<span class="o">[</span>int<span class="o">]</span><span class="nv">$c</span> <span class="o">=</span> <span class="nv">$j</span>/100;
<span class="o">[</span>int<span class="o">]</span><span class="nv">$y</span> <span class="o">=</span> <span class="nv">$j</span>%100;

<span class="o">[</span>int<span class="o">]</span><span class="nv">$h</span> <span class="o">=</span> <span class="o">(((</span>26 * <span class="nv">$m</span> -2<span class="o">)</span>/10<span class="o">)</span> + <span class="nv">$t</span> + <span class="nv">$y</span> + <span class="nv">$y</span>/4 + <span class="nv">$c</span>/4 -2 * <span class="nv">$c</span><span class="o">)</span>%7

<span class="k">if</span><span class="o">(</span><span class="nv">$h</span> -lt 0<span class="o">)</span>
<span class="o">{</span>
        <span class="nv">$h</span> +<span class="o">=</span>7;
<span class="o">}</span>

<span class="o">[</span>string<span class="o">]</span><span class="nv">$Tag</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>;
switch<span class="o">(</span><span class="nv">$h</span><span class="o">)</span>
<span class="o">{</span>
        0 <span class="o">{</span> <span class="nv">$Tag</span> <span class="o">=</span> <span class="s2">&quot;Sonntag&quot;</span>; <span class="nb">break</span><span class="o">}</span>

        1 <span class="o">{</span> <span class="nv">$Tag</span> <span class="o">=</span> <span class="s2">&quot;Montag&quot;</span>; <span class="nb">break</span><span class="o">}</span>

        2 <span class="o">{</span> <span class="nv">$Tag</span> <span class="o">=</span> <span class="s2">&quot;Dienstag&quot;</span>; <span class="nb">break</span><span class="o">}</span>

        3 <span class="o">{</span> <span class="nv">$Tag</span> <span class="o">=</span> <span class="s2">&quot;Mittwoch&quot;</span>; <span class="nb">break</span><span class="o">}</span>

        4 <span class="o">{</span> <span class="nv">$Tag</span> <span class="o">=</span> <span class="s2">&quot;Donnerstag&quot;</span>;<span class="nb">break</span><span class="o">}</span>

        5 <span class="o">{</span> <span class="nv">$Tag</span> <span class="o">=</span> <span class="s2">&quot;Freitag&quot;</span>; <span class="nb">break</span><span class="o">}</span>

        6 <span class="o">{</span> <span class="nv">$Tag</span> <span class="o">=</span> <span class="s2">&quot;Samstag&quot;</span>; <span class="nb">break</span><span class="o">}</span>
<span class="o">}</span>

Write-Host <span class="s2">&quot;Der &quot;</span> + <span class="nv">$t</span> +<span class="s2">&quot;.&quot;</span> + <span class="nv">$MerkeMonat</span> + <span class="s2">&quot;.&quot;</span> + <span class="nv">$j</span> + <span class="s2">&quot; ist ein &quot;</span> + <span class="nv">$Tag</span>
</pre></div>
</div>
</div></blockquote>
</li>
<li><p class="first">Schreiben Sie eine Funktion, die ihnen die Größe des vorhandenen physikalischen und virtuellen RAMs ausgibt. Benutzen Sie zum Ermitteln der Größe die WMI-Klasse WIN32_OperatingSystem und deren Eigenschaften <strong>FreePhysicalMemory</strong> sowie <strong>FreeVirtualMemory</strong>. Als kleine &#8220;Zugabe&#8221; möchten Sie die Angabe der Größe in verschiedenen Formaten (Byte, KByte, MByte) ermöglichen.</p>
</li>
<li><p class="first">Schreiben Sie eine Funktion zum Umbenennen eines Computernamens. Der Name soll entweder per Eingabeaufforderung übergeben werden können oder aus einer Textdatei gelesen werden, falls keine Eingabe vorgenommen wird. Kommentieren Sie die Funktion über die Powershell-typische Hilfesyntax. Prüfen Sie innerhalb der Funktion, ob Sie überhaupt die administrativen Rechte für die Umbenennung haben. Zum Abschluss des Vorgangs müssen Sie einen Reboot vornehmen.</p>
</li>
<li><dl class="first docutils">
<dt>Powershell kann mit Hilfe des CommandLets <strong>Get-Eventlog</strong> die Ereignisanzeige von lokalen und remote-Computern anzeigen und filtern. Schreiben Sie eine Funktion <em>getLogInfos</em>, die Ihnen folgende Auswahlmöglichkeiten zulässt:</dt>
<dd><ul class="first simple">
<li>Wahl des Computers</li>
<li>Wahl des jeweiligen EventLogs</li>
<li>Wahl des jeweiligen Eintrags, z.B. Error, Warnig, Information</li>
</ul>
<p class="last">Informieren Sie sich mit Hilfe von get-help über die weiteren Möglichkeiten von Get-Eventlog</p>
</dd>
</dl>
</li>
<li><p class="first">Verändern von Attributen einer Datei</p>
<p>Sie haben als Administrator einige Dateien, auf die sie von Zeit zu Zeit zugreifen müssen. Um die Dateien vor versehentlichen Änderungen zu schützen, versehen Sie diese mit ReadOnly - Flag. Leider ist aber jetzt ein Bearbeiten dieser Dateien mühsam, weil Sie nun immer erst dieses Flag ändern müssen.</p>
<p>Schreiben Sie ein parametrisiertes Skript, welches alle Dateien eines Ordners ReadOnly bzw. Nicht-ReadOnly setzen kann. Schreiben Sie zusätzlich eine Funktion, die Ihnen alle Dateien mit ReadOnly-Flag auflistet.
Eine Hilfe-Funktion soll Sie bei einer falschen Eingabe unterstützen.</p>
</li>
<li><p class="first">Ein Außendienstmitarbeiter erhält ein neues Firmen-Laptop. Auf seinem alten Laptop sind viele WLAN-Profile gespeichert und Sie suchen einen Weg, um diese Profile auf den neuen Rechner ohne manuelles Neuanlegen zu übernehmen. Ein Kollege erzählt Ihnen, dass Sie mit Hilfe des Befehls netsh Profile sowie exportieren als auch importieren können.
- Informieren Sie sich über die Möglichkeiten des Befehls netsh
- Schreiben Sie ein Skript, welches sowohl den Export als auch den Import der WLAN-Profile ermöglicht.</p>
</li>
<li><p class="first">Kommentieren Sie die Elemente des folgenden Quellcodes</p>
<blockquote>
<div><div class="highlight-sh"><div class="highlight"><pre>
</pre></div>
</div>
</div></blockquote>
</li>
<li><p class="first">Aufruf von Remote-Desktop-Sitzungen</p>
<blockquote>
<div><p>Erstellen Sie ein Skript, welches eine rdp-Verbindung unter Berücksichtigung verschiedener Optionen des mstsc-Befehls ermöglicht.</p>
</div></blockquote>
</li>
<li><p class="first">Setzen Sie mit Hilfe der PS die IP-Adresse eines Rechners. Geben Sie auch die Daten für Gateway, SN-Mask, NIC, DNS-Server</p>
</li>
<li><p class="first">Mit Hilfe des Befehls net view \UNC-Name können Sie die Freigaben eines Rechners ermitteln. Schreiben Sie eine Funktion, die als Parameter einen UNC-Namen und einen speziellen Freigabetyp erwartet. Die Funktion soll dann die gefundenen Freigaben zurückgeben.</p>
</li>
<li><p class="first">Programmieren eines HangMan-Spiels</p>
<blockquote>
<div><p>Okay, it is time to turn your attention back to the chapter’s main game project, the PowerShell Hangman game. The PowerShell Hangman game is a word guessing game in which the player is challenged to guess a randomly selected secret word, a letter at a time. To win, the player must guess each letter in the word in 12 guesses or fewer.</p>
<p>The overall construction of the PowerShell Hangman game will be completed in 11 steps, as outlined here:</p>
<ol class="arabic">
<li><p class="first">Create a new script file using the PowerShell script template.</p>
</li>
<li><p class="first">Define and initialize game variables in the Initialization Section.</p>
</li>
<li><p class="first">Define functions located in the Functions and Filters Section.</p>
</li>
<li><p class="first">Prompt the player for permission to play the game.</p>
</li>
<li><dl class="first docutils">
<dt>Create a loop to control overall gameplay.</dt>
<dd><ol class="first last arabic simple">
<li>Randomly select the game’s secret word.</li>
<li>Create a loop to control the collection and analysis of player input.</li>
<li>Collect and validate player guesses.</li>
<li>Display the result of each guess.</li>
<li>Determine when the game is over.</li>
<li>Challenge the player to play again.</li>
</ol>
</dd>
</dl>
</li>
</ol>
</div></blockquote>
</li>
</ul>
</div>


          </div>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="Allgemeiner Index"
             >Index</a></li>
        <li><a href="../index.html">PS4SYS</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2010, STE.
      Mit <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1 erstellt.
    </div>
  </body>
</html>